﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Model
{
    public class BrugerCollection
    {
        Bruger aktuelBruger;

        // liste med alle brugere.
        List<Bruger> brugere = new List<Bruger>();

        private object objLock = new object();  // Objektlås til trådsikring

        // konstruktør der opretter en bruger og tilføjer til listen
        public Bruger OpretBruger(string navn, string password, bool administrator, string email,
            int telefonnr, string adresse, int postnr, string by, bool aktiv, Int64 kontonr, int regnr, string kontraktType)
        {
            lock (objLock)
            {
                int personID = brugere.Count + 1;

                Bruger bruger = new Bruger(personID, navn, password, administrator, email, telefonnr, adresse, postnr, by, aktiv, kontonr, regnr, kontraktType);
                brugere.Add(bruger);
                return bruger;
            }
        }

        // finder en bruger til login
        public Bruger BrugerLogin(string email, string pass)
        {
            foreach (var item in brugere)
            {
                if(item.email == email && item.password == pass )
                {
                    return item;
                }
            }
            return null;
        }

        // metode der finder brugeren hvis brugeren findes vha. personID
        public Bruger FindBruger(int personID)
        {
            bool fundet = false;
            int index = 0;

            while (!fundet)
            {
                if (brugere[index].personID == personID)
                {
                    fundet = true;
                }
                else
                {
                    index++;
                }
            }
            return brugere[index];
        }

        public List<Bruger> VisBrugere()
        {
            return brugere;
        }

        public Bruger RetBruger(int personID, string navn, string adresse, int postnr, string by, string email,
                                int telefonnr, string password, Int64 kontonr, int regnr, bool administrator, bool aktiv, string kontraktType)
        {
            lock (objLock)
            {
                try
                {
                    aktuelBruger = FindBruger(personID);
                }
                catch (NullReferenceException e)
                {
                    throw e;
                }

                if (aktuelBruger != null)
                {
                    aktuelBruger.navn = navn;
                    aktuelBruger.password = password;
                    aktuelBruger.administrator = administrator;
                    aktuelBruger.email = email;
                    aktuelBruger.telefonnr = telefonnr;
                    aktuelBruger.adresse = adresse;
                    aktuelBruger.postnr = postnr;
                    aktuelBruger.by = by;
                    aktuelBruger.aktiv = aktiv;
                    aktuelBruger.kontonr = kontonr;
                    aktuelBruger.regnr = regnr;
                    aktuelBruger.KontraktType = kontraktType;

                    return aktuelBruger;
                }
                else
                    return null;
            }
        }

        public void TilknytBrugerTilProjekt(Bruger bruger, Projekt projekt)
        {
            foreach (var item in brugere)
            {
                if (item.personID == bruger.personID)
                {
                    item.TilknytProjektTilBruger(projekt);
                }
            }
        }
    }
}